home *** CD-ROM | disk | FTP | other *** search
- // -------------------------------------------------------------------------------------
- // ScrollText.h
- // Author: Martin D. Flynn
- // Description:
- // This class provide a full-featured set of utilities to handle printing to a Text
- // object within a ScrollView. This includes the ability to change the text font and
- // color of the text printed to the Text object. This class will also handle text sent
- // to it from any secondary thread. It will automatically send the data to be printed
- // to the main thread to be printed into the Text object (only if objectThreadPerform
- // is compiled with the application).
- // -------------------------------------------------------------------------------------
- // Permission is granted to freely redistribute this source code, and to use fragments
- // of this code in your own applications if you find them to be useful. This class,
- // along with the source code, come with no warranty of any kind, and the user assumes
- // all responsibility for its use.
- // -------------------------------------------------------------------------------------
- // example:
- //
- // /* scrollview outlet */
- // - setMyScrollView:anObject
- // {
- // myTextView = [ScrollText newScrollText:anObject];
- // [myTextView setAutoLineFeed:NO]; // default
- // return self;
- // }
- //
- // /* display formatted error message */
- // - displayError:(char *)textError
- // {
- // textPrintf(myTextView, "ERROR: %s\n", textError);
- // return self;
- // }
- //
- // -------------------------------------------------------------------------------------
- #import <objc/Object.h>
-
- // --------------------------------------------------------------------------------
- // formatted text size limit for 'textPrintf'
- #define textStringSIZE 4096 // actual size cannot be known
-
- // --------------------------------------------------------------------------------
- // method name synonyms
- #define setAutoLF setAutoLineFeed
-
- // --------------------------------------------------------------------------------
- // errors passed by 'commandDidComplete:withError:' via 'runCommand:...'
- // Note: these codes may be shared by the running command which executes an exit(#)
- #define RUNCMD_STOPPED -1 // command stopped/aborted
- #define RUNCMD_SUCCESS 0 // executed/completed successfully
- #define RUNCMD_EXEC 255 // cannot execute execl shell
-
- // -------------------------------------------------------------------------------------
- // structures used internal to ScrollText
-
- /* text attributes */
- typedef struct textAttr_s {
- id fontId;
- int colorMode; // 0=none, 1=gray, 2=color
- NXColor color; // contains only gray if mode=1
- } textAttr_t;
-
- // scroll text data queue
- typedef struct textQueue_s {
- char *record;
- textAttr_t attr;
- void *next;
- } textQueue_t;
-
- // -------------------------------------------------------------------------------------
- // RunServer support
- @protocol RemoteClient // sent by server to client
- - (oneway void)commandOutput:(const char*)buffer len:(int)length;
- - (oneway void)commandDidCompleteWithError:(int)errorCode;
- @end
-
- // --------------------------------------------------------------------------------
- @interface ScrollText : Object <RemoteClient>
- {
-
- id delegate; // delegate for RunServer support
-
- id scrollView; // scroll view object
- id textView; // text view object
-
- textAttr_t runAttr; // newly added text attributes
-
- BOOL wasEditable; // scrollView was editable
- BOOL autoLf; // auto linefeed mode
-
- mutex_t queueMutex; // text queue mutex
- textQueue_t *queueData; // pointer to front of queue
- textQueue_t *queueBack; // pointer to end of queue
-
- int cmdChild; // command execution
- int inputDescriptor; // input pipe
-
- }
-
- // --------------------------------------------------------------------------------
- + newScrollText:anObject;
- // Creates a new ScrollText object to handle text scrolling. anObject must be
- // a ScrollView object which has a Text content view. This is compatible
- // with the outlet provided by the text scroll view object in Interface Builder.
- //
- // --------------------------------------------------------------------------------
- - setDelegate:aDelegate;
- // Currently used for RunServer support. Returns self.
- //
- // --------------------------------------------------------------------------------
- - setAutoLineFeed:(BOOL)mode;
- // Sets the autoLineFeed options. If set to YES, then a newLine will be sent
- // after each string written to the scroll text. The default is NO.
- //
- // --------------------------------------------------------------------------------
- - docView;
- // Returns the ScrollView docView.
- //
- // --------------------------------------------------------------------------------
- - scrollView;
- // Returns the ScrollView id.
- //
- // --------------------------------------------------------------------------------
- - setTextAttributeFont:fontId;
- - setTextAttributeGray:(float)aGray;
- - setTextAttributeColor:(NXColor)aColor;
- // Set RTF font/gray run attributes for newly added text.
- //
- // --------------------------------------------------------------------------------
- - setTabStops:(float*)tabArray count:(int)c;
- - setTab:(float)tabSize count:(int)c;
- // Set default tabs stops. 'setTabStops:count:' set the default tabs to those
- // specified in the array 'tabArray'. 'setTab:count:' sets the default tabs to
- // multiples of 'tabSize'. Both return self.
- //
- // --------------------------------------------------------------------------------
- - clearScrollText;
- // This clears the contents of the Text ScrollView. Returns self.
- //
- // --------------------------------------------------------------------------------
- - deleteLinesFrom:(int)fLine to:(int)tLine;
- // This deletes the specified lines from the Text ScrollView.
- //
- // --------------------------------------------------------------------------------
- - (int)textLines;
- // Returns the current number of lines present in the Text object.
- //
- // --------------------------------------------------------------------------------
- - print:sender;
- // Prints the contents of the ScrollView to the printer.
- //
- // --------------------------------------------------------------------------------
- - enscriptPrint:(char*)title option:(char*)option printPanel:(BOOL)prtPnl;
- // Prints the contents of the ScrollView to the printer using unix command enscript.
- //
- // --------------------------------------------------------------------------------
- - (int)textPrint:(const char*)buffer;
- - (int)textPrintf:(const char*)fmt args:(va_list)args;
- - (int)textPrintf:(const char*)fmt, ...;
- int textPrintf(id textView, const char *fmt, ...);
- // Appends the specified formated string to the contents of the ScrollView.
- //
- // --------------------------------------------------------------------------------
- - runCommand:(const char*)command withPath:(const char*)cmdPath;
- - runCommand:(const char*)command;
- - terminateCommand;
- - killCommand;
- // Allows running a command shell and using the scrollable text view to place the
- // output. The delegate is sent the message commandDidComplete:withError: when
- // the command has completed execution.
- //
- // --------------------------------------------------------------------------------
- - (void)commandOutput:(const char*)buffer len:(int)len;
- - (void)commandDidCompleteWithError:(int)errorCode;
- // Provides support for RunServer.
- //
- // --------------------------------------------------------------------------------
-
- @end
-